﻿using System;
using System.Net;
using System.Net.Mail;
using TestWebApplication.Models.Config;
using TestWebApplication.Models.Entities;

namespace TestWebApplication.Models
{
    public class EmailNotificationService : INotificationService
    {
        private readonly IEmailNotificationServiceConfig config;

        public EmailNotificationService(IEmailNotificationServiceConfig config)
        {
            if (config == null)
            {
                throw new ArgumentNullException("config");
            }

            this.config = config;
        }
        
        public void Notify(User user, string baseUrl)
        {
            var client = new SmtpClient(config.SmtpHost);
            client.Credentials = new NetworkCredential(config.SmtpUserName, config.SmtpPassword);

            var url = string.Format("{0}/Account/RegisterComplete?key={1}", baseUrl, user.ActivationKey);

            var msgBody = string.Format(@"Уважаемый пользователь {0}!<br/><br/>"
                + @"Для завершения регистрации пройдите по ссылке: <a href=""{1}"">{1}</a>",
                user.Login, url);

            var message = new MailMessage(config.MessageFrom, user.Email, "Завершение регистрации", msgBody);

            message.IsBodyHtml = true;

            try
            {
                client.Send(message);
            }
            catch(Exception ex)
            {
                throw new EmailNotificationException(
                    "Во время отправки почтового сообщения произошла ошибка", ex);
            }
        }

    }
}